import javax.swing.*;
import java.awt.*;

//import java.io.*;
//public class Main {
//    public static void main(String[] args){
//        File source=new File("D:\\AAA");
//        File dest=new File("D:\\test\\AAA");
//        copyDirectory(source,dest);
//        System.out.println("复制成功");
//    }
//    public static void copyDirectory(File src,File dest){
//       if(!src.exists()){
//           System.out.println("源目录不存在："+src.getAbsolutePath());
//           return;
//       }
//       if(!dest.exists()){
//           dest.mkdirs();
//       }
//       File[] files=src.listFiles();
//       if(files!=null){
//           for(File f:files){
//               File newDest=new File(dest,f.getName());
//               if(f.isDirectory()){
//                   copyDirectory(f,newDest);
//               }else{
//                   copyFile(f,newDest);
//               }
//           }
//       }
//    }
//    public static void copyFile(File src,File dest){
//        BufferedInputStream bis = null;
//        BufferedOutputStream bos = null;
//        try {
//            bis = new BufferedInputStream(new FileInputStream(src));
//            bos = new BufferedOutputStream(new FileOutputStream(dest));
//            byte[] buffer = new byte[1024]; // 缓冲区，1KB
//            int bytesRead;
//            while ((bytesRead = bis.read(buffer)) != -1) {
//                bos.write(buffer, 0, bytesRead); // 写入读取到的字节
//            }
//        } catch (IOException e) {
//            // 处理文件复制时的异常
//            System.out.println("文件复制失败：" + e.getMessage());
//        }
//
//    }
//}
//import java.io.*;
//import java.text.*;
//public class Main {
//    public static void main(String[] args) {
//        File f=new File("D:\\作业");
//        if(f.exists()&&f.isDirectory()){
//            try{
//                traverse(f);
//            }catch(Exception e){
//                System.out.println("遍历过程中发生异常: " + e.getMessage());
//            }
//        }else{
//            System.out.println("指定路径无效");
//        }
//    }
//    public  static void traverse(File file){
//        try{
//            if(file.isFile()){
//                long size=file.length();
//                String Size=formatSize(size);
//                System.out.println(file.getName()+" (" + Size + ")");
//            }else if(file.isDirectory()){
//                System.out.println("[" + file.getName() + "]");
//                File[] files=file.listFiles();
//                if(files!=null){
//                    for(File f:files){
//                        traverse(f);
//                    }
//                }else{
//                    System.out.println("无法访问目录内容: " + file.getAbsolutePath());
//                }
//            }
//        }catch(Exception e){
//            System.out.println("访问文件或目录时出错: " + file.getAbsolutePath() + "，原因：" + e.getMessage());
//        }
//    }
//    public  static String formatSize(long sizeInBytes){
//        DecimalFormat df=new DecimalFormat("0.00");
//        if(sizeInBytes<1024*1024){
//            return df.format(sizeInBytes/1024)+" KB";
//        }else{
//            return df.format(sizeInBytes / (1024.0 * 1024.0)) + " MB";
//        }
//    }
//}
//import java.io.*;
//public class Main {
//    public static void main(String[] args) {
//        File file=new File("D:\\作业");
//        if(file.exists()&&file.isDirectory()){
//            File[] files=file.listFiles((d,name)->name.contains("作业"));
//            if(files!=null){
//                for(File f:files){
//                    if(f.isFile()){
//                        System.out.println(f.getName());
//                    }
//                }
//            }
//        }
//    }
//}
//import java.io.*;
//public class Main{
//    public static void main(String[] args) {
//        File file=new File("D:\\作业");
//        if(file.exists()&&file.isDirectory()){
//            File[] files=file.listFiles(new ReportFileFilter());
//            if(files!=null){
//                for(File f:files){
//                    if(f.isFile()){
//                        System.out.println(f.getName());
//                    }
//                }
//            }
//        }
//    }
//}
//class ReportFileFilter implements FilenameFilter{
//    public boolean accept(File f,String name){
//        return name.contains("作业");
//    }
//}
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

public class Main extends JFrame implements ActionListener {
    private JTextField inputField;//Java Swing 中定义一个文本输入框组件的声明
    private String currentInput = "";//用来存储当前用户输入内容的字符串变量

    public Main() {
        setTitle("计算器");
        setSize(300, 400);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setLocationRelativeTo(null);//让窗口在屏幕中央显示

        inputField = new JTextField();
        inputField.setEditable(false);//让输入框变成只读，用户无法编辑
        inputField.setFont(new Font("Arial", Font.BOLD, 24));//让输入框里的文字变成 Arial 字体，加粗，字号24
        add(inputField, BorderLayout.NORTH);

        JPanel panel = new JPanel(new GridLayout(4, 4, 5, 5));//创建一个带有网格布局的面板，布局为4行4列，组件间水平和垂直间距都是5像素

      String[] buttons = {
                "7", "8", "9", "/",
                "4", "5", "6", "*",
                "1", "2", "3", "-",
                "0", "C", "=", "+"
        };

        for (String text : buttons) {
            JButton button = new JButton(text);
            button.setFont(new Font("Arial", Font.BOLD, 20));
            button.addActionListener(this);
            panel.add(button);
        }

        add(panel, BorderLayout.CENTER);
        setVisible(true);
    }

    @Override
    public void actionPerformed(ActionEvent e) {
      String cmd = e.getActionCommand(); // 获取按钮上的文本（命令）

      // 如果点击的是数字按钮（0-9）
      if ("0123456789".contains(cmd)) {
        currentInput += cmd;            // 把数字追加到当前输入字符串后面
        inputField.setText(currentInput); // 更新显示框内容
      }

      // 如果点击的是运算符按钮 (+ - * /)
      else if ("+-*/".contains(cmd)) {
        // 当前输入不为空且最后一个不是运算符，才追加运算符
        if (!currentInput.isEmpty() && !endsWithOperator()) {
          currentInput += " " + cmd + " ";  // 运算符两边留空格，便于后续解析
          inputField.setText(currentInput); // 更新显示
        }
      }

      // 如果点击的是清除按钮 C
      else if ("C".equals(cmd)) {
        currentInput = "";    // 清空输入字符串
        inputField.setText(""); // 清空显示
      }

      // 如果点击的是等号按钮 =
      else if ("=".equals(cmd)) {
        try {
          double result = evaluate(currentInput);          // 计算表达式结果
          inputField.setText(String.valueOf(result));     // 显示结果
          currentInput = String.valueOf(result);          // 将结果作为新的输入，方便连算
        } catch (Exception ex) {                              // 计算出错（非法表达式等）
          inputField.setText("错误");                       // 显示错误信息
          currentInput = "";                                // 清空输入
        }
      }
    }


  private boolean endsWithOperator() {
        return currentInput.endsWith(" + ") || currentInput.endsWith(" - ") ||
                currentInput.endsWith(" * ") || currentInput.endsWith(" / ");
    }

    private double evaluate(String expression) {
        String[] tokens = expression.split(" ");
        double result = Double.parseDouble(tokens[0]);
        for (int i = 1; i < tokens.length; i += 2) {
            String op = tokens[i];
            double num = Double.parseDouble(tokens[i + 1]);
            switch (op) {
                case "+": result += num; break;
                case "-": result -= num; break;
                case "*": result *= num; break;
                case "/": result /= num; break;
            }
        }
        return result;
    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(Main::new);
    }
}
//public class Main {
//    public static void main(String[] args) {
//      JFrame jf = new JFrame("窗口");
//      jf.setLayout(new FlowLayout());
//      jf.setSize(600,400);
//      JLabel label = new JLabel("牛帅明是猪",JLabel.CENTER);
//      jf.add(label);
//      jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//
//      JButton jb=new JButton("点我");
//      jf.add(jb);
//      jb.addActionListener(e->JOptionPane.showMessageDialog(null,"你点击了按钮"));
//      jb.setPreferredSize(new Dimension(100,40));
//        jf.setVisible(true);
//    }
//}